package com.ssyt.yt1.day27;

/**
 * <pre>
 * 设计一个线程操作类，要求可以产生三个线程对象，并可以分别设置三个线 程的线程名称和休眠时间，如下所示： 
 * 线程A，休眠1秒 
 * 线程B，休息2秒
 * 线程C，休息3秒 
 * 
 * 注：考虑Thread和Runnable两种方法，并在线程里打印线程名称和休眠时间
 * </pre>
 *
 * @author Hsu.
 * @since 2015年12月31日
 */
public class ThreadPrintDemo {

	/**
	 * 通过继承Thread类实现
	 */
	public static void testByThread() {
		new Thread1("线程A", 1000).start();
		new Thread1("线程B", 2000).start();
		new Thread1("线程C", 3000).start();
	}

	/**
	 * 通过实现Runnable接口实现
	 */
	public static void testByRunnable() {
		Runnable runnable = new Thread2("线程A", 1000);
		new Thread(runnable).start();

		Runnable runnable2 = new Thread2("线程B", 2000);
		new Thread(runnable2).start();

		Runnable runnable3 = new Thread2("线程C", 3000);
		new Thread(runnable3).start();
	}

	public static void main(String[] args) {
		testByThread();
	}
}

/**
 * 通过继承Thread类实现
 *
 * @author Hsu.
 * @since 2015年12月31日
 */
class Thread1 extends Thread {

	private long sleepTime;

	public Thread1(String threadName, long sleepTime) {
		super();
		this.setName(threadName);
		this.sleepTime = sleepTime;
	}

	@Override
	public void run() {
		try {
			Thread.sleep(sleepTime);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("线程名称：" + this.getName() + ",睡眠时间：" + sleepTime);
	}

}

/**
 * 通过实现Runnable接口实现
 *
 * @author Hsu.
 * @since 2015年12月31日
 */
class Thread2 implements Runnable {

	private long sleepTime;

	public Thread2(String threadName, long sleepTime) {
		super();
		Thread.currentThread().setName(threadName);
		this.sleepTime = sleepTime;
	}

	@Override
	public void run() {
		try {
			Thread.sleep(sleepTime);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		System.out.println("线程名称：" + Thread.currentThread().getName()
				+ ",睡眠时间：" + sleepTime);
	}

}